% Ejercicio "Vocales seguidas"
\section*{\fbox{\theejercicio} - Vocales seguidas}

Construir mediante  LEX un programa que clasifique las palabras de un texto en tres categor\'{\i}as, mutuamente excluyentes:

\begin{enumerate}[a)]
\item Palabras que tengan  dos  vocales  consecutivas,  (pero no terminen en vocal).
\item Palabras que terminen en  vocal, (pero  no  contengan  dos vocales seguidas).
\item Palabras  que tengan dos vocales consecutivas y terminen en vocal.
\end{enumerate}

La salida del programa ser\'a el n\'umero de palabras de cada grupo que hay en un dedeterminado texto fuente.

\par Solamente se consideran palabras las concatenaciones de letras may\'usculas o  min\'usculas, separadas por blancos, tabuladores o finales  de  linea. Todo lo dem\'as no son palabras y debe simplemente ignorarse.

\par Ejemplo: Sea el fichero de entrada:
\begin{center}
\begin{tabular}{|l|} \hline
\verb@Ciervo   tigre   habitacion@ \\
\verb@raton   que?  cuando  donde@ \\
\verb@curso   cuarto  4to  f.i.n.@ \\ \hline
\end{tabular}
\end{center}

La salida que obtendremos ser\'a:
\begin{center}
\begin{list}{}{}
\item Clase A)1.
\item Clase B)3.
\item Clase C)3.
\end{list}
\end{center}

Esto se corresponde con el siguiente reconocimiento de lexemas:
\begin{center}
\begin{list}{}{}
\item Clase A)\verb@"habitacion"@
\item Clase B)\verb@"tigre"  "donde"  "curso"@
\item Clase C)\verb@"Ciervo"  "cuando"  "cuarto"@
\end{list}
\end{center}

Es una palabra, aunque no se clasifica en ninguna de las categorias definidas, el lexema \verb@"raton"@

\par No son palabras seg\'un el p\'arrafo anterior los lexemas: \verb@"que?"@, \verb@"4to"@ y \verb@"f.i.n."@

% Solución del ejercicio
\subsection*{SOLUCI\'ON}

\begin{verbatim}
%{
   int a = 0;
   int b = 0;
   int c = 0;
%}

%%

[a-zA-Z]*[aeiouAEIOU][aeiouAEIOU][a-zA-Z]*[aeiouAEIOU]  { c++; }
[a-zA-Z]*[aeiouAEIOU][aeiouAEIOU]                       { c++; }
[a-zA-Z]*[aeiouAEIOU]                                   { b++; }
[a-zA-Z]*[aeiouAEIOU][aeiouAEIOU][a-zA-Z]*              { a++; }
[a-zA-Z]+                             { /* otras palabras */ ; }
[^\n\t\ ]+                            { /* no palabras... */ ; }
.|\n ;                                                     { ; }

%%

int yywrap() {
   printf("Clase A)%d\n", a);
   printf("Clase B)%d\n", b);
   printf("Clase C)%d\n", c);
   return 1;
}
\end{verbatim}

NOTAS:
\begin{itemize}
\item Al reconocer primero las palabras de la clase C, aquellos lexemas que no cumplen las condiciones de C, pero que terminan en vocal son los que no tienen dos vocales seguidas. Igualmente para la expresion de la clase A, y las dem\'as.
\item La expresion  \verb@[^\n\t\ ]+@ permite eliminar lexemas como \verb@"f.i.n."@ o \verb@"que?"@
\end{itemize}